package com.topsun.framework.common.core.util;

import lombok.Data;

import java.math.BigDecimal;

/**
 * 坐标工具类
 */
@Data
public class CoordUtil {

    private static final int POWER = 1000000;

    /**
     * 经度/纬度转换为整型，非坐标形式
     */
    public static int toInt(double value) {
        return (int) (value * POWER);
    }

    /**
     * 经度/纬度转换为整型，非坐标形式
     */
    public static int toInt(String value) {
        return toInt(Double.parseDouble(value));
    }


    /**
     * 浮点型坐标转换为整型 小数点后移6位
     */
    public static int[] toInt(double[] lngLat) {
        int[] lngLatInt = new int[2];
        lngLatInt[0] = toInt(lngLat[0]);
        lngLatInt[1] = toInt(lngLat[1]);
        return lngLatInt;
    }

    /**
     * 字符串坐标转换为整型 小数点后移6位
     */
    public static int[] coordToInt(String coordinate) {
        String[] split = coordinate.split(StringPool.COMMA);
        int[] lngLatInt = new int[2];
        lngLatInt[0] = toInt(split[0]);
        lngLatInt[1] = toInt(split[1]);
        return lngLatInt;
    }

    /**
     * 经度/纬度转换为浮点型，非坐标形式
     */
    public static double toDouble(int value) {
        return new BigDecimal(String.valueOf(value)).movePointLeft(6).doubleValue();
    }

    /**
     * 经度/纬度转换为浮点型，非坐标形式
     */
    public static double toDouble(String value) {
        return Double.parseDouble(value);
    }

    /**
     * 整型坐标转换为浮点型坐标 小数点前移6位
     */
    public static double[] coordToDouble(int[] coordinate) {
        double[] lngLatDouble = new double[2];
        lngLatDouble[0] = toDouble(coordinate[0]);
        lngLatDouble[1] = toDouble(coordinate[1]);
        return lngLatDouble;
    }

    /**
     * 字符串坐标转换为浮点型坐标 小数点前移6位
     * coordinate:  112.123434,38.123322
     */
    public static double[] coordToDouble(String coordinate) {
        String[] split = coordinate.split(StringPool.COMMA);
        double[] lngLatDouble = new double[2];
        lngLatDouble[0] = toDouble(split[0]);
        lngLatDouble[1] = toDouble(split[1]);
        return lngLatDouble;
    }

    /**
     * 经度/纬度转换为字符串，非坐标形式
     */
    public static String toStr(int value) {
        return String.valueOf(toDouble(value));
    }

    /**
     * 经度/纬度转换为字符串，非坐标形式
     */
    public static String toStr(double value) {
        return String.valueOf(value);
    }

    /**
     * 整型坐标转换为字符串坐标 小数点前移6位
     */
    public static String coordToStr(int[] coordinate) {
        return toStr(coordinate[0]) + StringPool.COMMA + toStr(coordinate[1]);
    }

    /**
     * 整型坐标转换为字符串坐标 小数点前移6位
     */
    public static String coordToStr(double[] coordinate) {
        return toStr(coordinate[0]) + StringPool.COMMA + toStr(coordinate[1]);
    }

    public static void main(String[] args) {
        System.out.println(toDouble(123223341));
    }
}
